package com.tdam2011.grupo04.SMSWeb;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.TimeZone;
import java.util.Timer;
import java.util.TimerTask;

import javax.xml.parsers.SAXParser;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.BasicHttpEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import com.tdam2011.grupo04.Mensaje;
import com.tdam2011.grupo04.R;
import com.tdam2011.grupo04.Sql;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.PendingIntent.CanceledException;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.IBinder;
import android.util.Log;

public class ConsultaMensajeService extends Service{
	  
    private Timer timer;
    
    private String usuario;
	private String contrasenia;
	private Date fecha;
 
	public static NotificationManager mNotificationManager;
	
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
 
    @Override
    public void onCreate(){
        super.onCreate();
        timer = new Timer();
    }
 
    @Override
    public void onStart(final Intent intent, final int startId){
        super.onStart(intent, startId);
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {  
            	ConsultaMensajeHandler handler= consultarMensajes();
            	if(handler != null && handler.getConsultaOK()){ 
            		List<com.tdam2011.grupo04.entidades.Mensaje> listaMensajes= handler.getMensajes();
            		if(!listaMensajes.isEmpty()){
	            		String ns = Context.NOTIFICATION_SERVICE;
	            	    mNotificationManager = (NotificationManager) getSystemService(ns);
	            		int icon = R.drawable.nuevo_mensaje;   
	            		CharSequence tickerText = "Nuevo Mensaje"; 
	            		long when = System.currentTimeMillis(); 
	            		Context context = getApplicationContext();
	            		CharSequence contentTitle = "Nuevo Mensaje Web de: " + listaMensajes.get(0).getNombreContacto(); 
	            		CharSequence contentText = listaMensajes.get(0).getCuerpoMensaje();
	
	            		Intent notificationIntent = new Intent(ConsultaMensajeService.this, HistorialMensajesWeb.class);
	            		PendingIntent contentIntent = PendingIntent.getActivity(ConsultaMensajeService.this, 0, notificationIntent, 0);
	            		
	            		Intent mensajes= new Intent();
	            		mensajes.putExtra("usuarioMensaje", listaMensajes.get(0).getNombreContacto());
	            		mensajes.putExtra("cuerpoMensaje", listaMensajes.get(0).getCuerpoMensaje());
	            		try {
							contentIntent.send(ConsultaMensajeService.this, 1, mensajes);
						} catch (CanceledException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
	
	            		Notification notification = new Notification(icon, tickerText, when);
	            		notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);
	            		
	            		mNotificationManager.notify(1, notification);
            		}
				}
            }
        }, 0, 180000);
    }
    
    private ConsultaMensajeHandler consultarMensajes(){
		SharedPreferences app_preferences = getSharedPreferences("usuarioRegistrado", MODE_PRIVATE); 
        usuario= app_preferences.getString("usuario", "user");
        contrasenia= app_preferences.getString("contrasenia", "pass");
        fecha= new Date();
        GregorianCalendar calendar= new GregorianCalendar(TimeZone.getTimeZone("GTM"));
        Log.e("FECHA", calendar.getGregorianChange().toGMTString());
        
        
        // HAY QUE VER BIEN LA FECHA!
        ConsultaMensajeHandler handler= null;
		String xml=
			"<action id='REQUEST_RANDOM_VALUE' name='get-messages'>" +
				"<action-detail>" +
					"<auth username='"+usuario+"' key='"+contrasenia+"'></auth>" +
					"<filter type='timestamp'>20/11/2011 12:14:40</filter>" +
				"</action-detail>" +
			"</action>";
		try{
			HttpClient client = new DefaultHttpClient();
			HttpPost post = new HttpPost("http://192.168.1.34:8080/MessageSender/Sender");
			BasicHttpEntity ent = new BasicHttpEntity();
			ent.setContentType("application/xml");
			ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());
			ent.setContent(in);
			post.setEntity(ent);						
			HttpResponse responsePost= client.execute(post);
			HttpEntity resEntity= responsePost.getEntity();
			
			SAXParser parser = XmlParserProvider.getParser(); 
			handler= new ConsultaMensajeHandler();
									
			if(resEntity != null){
				String res= EntityUtils.toString(resEntity);
				parser.parse(new ByteArrayInputStream(res.getBytes()), handler);
				XmlParserProvider.releaseParser(parser);
			}
		}catch (Exception e) {
			e.printStackTrace();
			handler= null;
		}
		return handler;
	}
}
